PM_FUNC_NORM_ATTRIB SKILL:SkillEmber( SKILL_CALL:iCall, Int:id )
{
	switch( iCall )
	{
		case CALL_REGISTER: return SkillRegister( .Name = "Ember", .Type = TYPE_FIRE, .callTypes = CALL_BIND_DOWN|CALL_ENTITY_THINK, .PP = 25, .Charges = 1, .DelayTime = 10.0 );
		case CALL_HELP:     return SkillHelp( "Place an Ember that burns enemies." );
		case CALL_BIND_DOWN:
		{
			new Coord:cAimOrigin[3], Vector:vAimOrigin[3];
			PlayerAimOrigin( id, cAimOrigin, .iDist = 300 );
			CoordToVector( cAimOrigin, vAimOrigin );

			new Int:iEnt = EntitySkillCreate( .iPlayer = id,
											.fThinkTime = 0.5,
											.fDmgTime = 2.0,
											.fKillTime = 10.0,
											.iDamage = StatClamp( id, STAT_ATTACK, 10, 50 ),
											.fRadius = 100.0,
											.iProperty = SEP_THINK|SEP_AOEDAMAGE|SEP_KILL,
											.iMoveType = MOVETYPE_NONE,
											.iSolidType = SOLID_NOT,
											.iModel = MODEL_ROCK,
											.vOrigin = vAimOrigin,
											.bPlayerAngles = true,
											.vMins = Vector:{-1.0,-1.0,-1.0},
											.vMaxs = Vector:{1.0,1.0,1.0}
											);

			EntitySetNum( iEnt, ENTITY_AOETYPE, AOE_IGNORE_ATTACKER|AOE_VICTIM_TEAM );

			return SKILL_USED;
		}
		case CALL_ENTITY_THINK:
		{
			new Int:iEnt = g_iAttacker;

			EntitySoundEmit( iEnt, SOUND_BURN );

			new Vector:vOrigin[3], Coord:cOrigin[3];
			EntityGetOrigin( iEnt, vOrigin );
			VectorToCoord( vOrigin, cOrigin );

			EffectBlastCircle( .cOrigin = cOrigin,
								.iSprite = SPRITE_SHOCKWAVE,
								.iRadius = 100,
								.fLife = 1.0,
								.iWidth = 10,
								.iNoise = 0,
								.iRed = 255,
								.iGreen = 0,
								.iBlue = 0,
								.iAlpha = 255
							);

			EffectSpray( .cOrigin = cOrigin,
						.cVelocity = {0,0,15},
						.iSprite = SPRITE_XFIRE,
						.iCount = 5,
						.iSpeed = 10,
						.iNoise = 50,
						.iRenderMode = kRenderTransAdd
						);

			StatusAoE( .iInflictorID = id,
						.cOrigin = cOrigin,
						.iStatus = STATUS_BURN,
						.fRadius = 100.0,
						.iAmount = 1
					);
		}
	}
	return SKILL_READY;
}

PM_FUNC_NORM_ATTRIB SKILL:SkillFireBlast( SKILL_CALL:iCall, Int:id )
{
	switch( iCall )
	{
		case CALL_REGISTER: return SkillRegister( .Name = "Fire Blast", .Type = TYPE_FIRE, .callTypes = CALL_BIND_DOWN|CALL_ENTITY_TOUCH, .PP = 5, .Charges = 10, .DelayTime = 10.0 );
		case CALL_HELP:     return SkillHelp( "Damages and may Burn enemy." );
		case CALL_BIND_DOWN:
		{
			new Int:iEnt = EntitySkillCreate( .iPlayer = id,
											.iDamage = StatClamp( id, STAT_ATTACK, 30, 50 ),
											.fRadius = 50.0,
											.iProperty = SEP_TOUCH|SEP_AOEDAMAGE|SEP_KILL,
											.iMoveType = MOVETYPE_TOSS,
											.iSolidType = SOLID_BBOX,
											.iModel = MODEL_ROCK,
											.iSound = SOUND_BURN,
											.iSprite = SPRITE_EEXPLO,
											.bPlayerOrigin = true,
											.bPlayerAngles = true,
											.vMins = Vector:{-10.0,-10.0,-10.0},
											.vMaxs = Vector:{10.0,10.0,10.0},
											.iAimVelocity = StatClamp( id, STAT_SPEED, 500, 1000 )
											);

			EntitySetNum( iEnt, ENTITY_AOETYPE, AOE_IGNORE_ATTACKER|AOE_VICTIM_TEAM );

			EffectBeamFollow( .iEnt = iEnt,
								.iSprite = SPRITE_EEXPLO,
								.fLife = 2.0,
								.iWidth = 10,
								.iRed = 255,
								.iGreen = 205,
								.iBlue = 205,
								.iBrightness = 155
							);

			return SKILL_USED_PAUSE;
		}
		case CALL_ENTITY_TOUCH:
		{
			new Int:iEnt = g_iAttacker;

			new Vector:vOrigin[3];
			EntityGetOrigin( iEnt, vOrigin );

			StatusAoE( .iInflictorID = id,
						.cOrigin = VectorToCoord( vOrigin ),
						.iStatus = STATUS_BURN,
						.fRadius = 50.0,
						.iAmount = 3
					);
		}
	}
	return SKILL_READY;
}

PM_FUNC_NORM_ATTRIB SKILL:SkillFirePunch( SKILL_CALL:iCall, Int:id )
{
	#pragma unused id
	switch( iCall )
	{
		case CALL_REGISTER: return SkillRegister( .Name = "Fire Punch", .Type = TYPE_FIRE, .callTypes = CALL_BIND_DOWN, .PP = 15, .Charges = 1, .DelayTime = 1.0 );
		case CALL_HELP:     return SkillHelp( "Damages and may Burn enemy." );
		case CALL_BIND_DOWN:
		{
			return SKILL_USED;
		}
	}
	return SKILL_READY;
}

PM_FUNC_NORM_ATTRIB SKILL:SkillFireSpin( SKILL_CALL:iCall, Int:id )
{
	switch( iCall )
	{
		case CALL_REGISTER: return SkillRegister( .Name = "Fire Spin", .Type = TYPE_FIRE, .callTypes = CALL_BIND_DOWN, .PP = 15, .Charges = 10, .DelayTime = 10.0 );
		case CALL_HELP:     return SkillHelp( "Lights nearby enemies on fire." );
		case CALL_BIND_DOWN:
		{
			new Coord:cOrigin[3];
			get_user_origin( id, cOrigin );

			new Int:iDamage = StatClamp( id, STAT_ATTACK, 30, 70 );
			new Int:iBurn = StatClamp( id, STAT_SPECIAL, 5, 10 );
			new Float:fRadius = StatClamp( id, STAT_SPECIAL, 300.0, 700.0 );

			SkillAoEDamage( .attacker = id,
							.cOrigin = cOrigin,
							.fRadius = fRadius,
							.iMaxDamage = iDamage,
							.flags = AOE_IGNORE_ATTACKER|AOE_VICTIM_TEAM
							);

			StatusAoE( .iInflictorID = id,
						.cOrigin = cOrigin,
						.iStatus = STATUS_BURN,
						.fRadius = fRadius,
						.iAmount = iBurn
						);

			EffectBlastCircle( .cOrigin = cOrigin,
								.iSprite = SPRITE_EEXPLO,
								.iRadius = floatround( fRadius ),
								.fLife = 1.0,
								.iWidth = iDamage,
								.iNoise = 10,
								.iRed = 255,
								.iGreen = 0,
								.iBlue = 0,
								.iAlpha = 255
							);

			return SKILL_USED_PAUSE;
		}
	}
	return SKILL_READY;
}

PM_FUNC_NORM_ATTRIB SKILL:SkillFlamethrower( SKILL_CALL:iCall, Int:id )
{
	switch( iCall )
	{
		case CALL_REGISTER: return SkillRegister( .Name = "Flamethrower", .Type = TYPE_FIRE, .callTypes = CALL_BIND_DOWN|CALL_ENTITY_TOUCH, .PP = 15, .Charges = 10, .DelayTime = 5.0 );
		case CALL_HELP:     return SkillHelp( "Damages and may Burn enemy." );
		case CALL_BIND_DOWN:
		{
			new Int:iEnt = EntitySkillCreate( .iPlayer = id,
											.iDamage = StatClamp( id, STAT_ATTACK, 10, 20 ),
											.fKillTime = 1.0,
											.iProperty = SEP_TOUCH|SEP_DAMAGE|SEP_KILL,
											.iMoveType = MOVETYPE_FLY,
											.iSolidType = SOLID_BBOX,
											.iModel = MODEL_NONE,
											.iSound = SOUND_BURN,
											.iSprite = SPRITE_EEXPLO,
											.bPlayerOrigin = true,
											.bPlayerAngles = true,
											.vMins = Vector:{-10.0,-10.0,-10.0},
											.vMaxs = Vector:{10.0,10.0,10.0},
											.iAimVelocity = StatClamp( id, STAT_SPEED, 250, 500 )
											);

			EffectBeamFollow( .iEnt = iEnt,
								.iSprite = SPRITE_EEXPLO,
								.fLife = 1.0,
								.iWidth = 10,
								.iRed = 255,
								.iGreen = 205,
								.iBlue = 205,
								.iBrightness = 155
							);

			EntitySoundEmit( iEnt, SOUND_BURN );

			return SKILL_USED;
		}
		case CALL_ENTITY_TOUCH:
		{
			new Int:iVictim = g_iVictim;

			if ( is_user_alive( iVictim ) )
			{
				StatusApply( .iPlayer = iVictim,
							.iInflictorID = id,
							.iStatus = STATUS_BURN,
							.iAmount = 3
							);
			}
		}
	}
	return SKILL_READY;
}

